# CMake 最低版本号要求
# 指定运行此配置文件所需的 CMake 的最低版本为 2.8
cmake_minimum_required(VERSION 2.8)

# 项目信息
# 表示该项目的名称是 Demo04
project(Demo04)

# 设置变量
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(EXTRA_LIBS m)

# 加入一个配置头文件，用于处理 CMake 对源码的设置
configure_file(
    "${PROJECT_SOURCE_DIR}/config.h.in" 
    "${PROJECT_BINARY_DIR}/config.h"
)
# 语法如下
# configure_file(<input> <output>
#              [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
#              [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
# 拷贝一个 <input>（输入文件） 文件到 <output> （输出文件），
# 并且替换输入文件中被 @VAR@ 或者 ${VAR} 引用的变量值。
# 每一个变量将被替换成当前的变量值（注：CMake中的变量值）或者空串当变量未定义。
#
# 示例：
# 输入文件中的内容   #cmakedefine VAR
# 将会替换为 #define VAR 或者  /* #undef VAR */
# 
# 各个选项的意义
# COPYONLY 只拷贝文件，不进行任何的变量替换。这个选项在指定了 NEWLINE_STYLE 选项时不能使用（无效）。
# ESCAPE_QUOTES 躲过任何的反斜杠(C风格)转义。
#    注：躲避转义，比如你有个变量在CMake中是这样的
#    set(FOO_STRING "\"foo\"")
#    那么在没有 ESCAPE_QUOTES 选项的状态下，通过变量替换将变为 ""foo""，如果指定了 ESCAPE_QUOTES 选项，变量将不变。
# @ONLY 限制变量替换，让其只替换被 @VAR@ 引用的变量（那么 ${VAR} 格式的变量将不会被替换）。这在配置 ${VAR} 语法的脚本时是非常有用的。
# NEWLINE_STYLE 指定输出文件中的新行格式。UNIX 和 LF 的新行是 \n ，DOS 和 WIN32 和 CRLF 的新行格式是 \r\n 。 这个选项在指定了 COPYONLY 选项时不能使用（无效）。


# 是否使用自己的 MathFunction 库
option(USE_MYMATH "Use provided math implementation" ON)
#  option 提供选项让用户选择是 ON 或者 OFF ，如果没有提供初始化值，使用OFF。
#  但是请注意：这个option命令和你本地是否存在编译缓存的关系很大。
#  所以，如果你有关于 option 的改变，那么请你务必清理 CMakeCache.txt 和 CMakeFiles 文件夹。
#  还有，请使用标准的 [initial value] 值 ON 或者 OFF。



# 是否加入 MathFunction 库
if(USE_MYMATH)
    include_directories("${PROJECT_SOURCE_DIR}/math")
    add_subdirectory(math)
    set(EXTRA_LIBS ${EXTRA_LIBS} MathFunction)
endif(USE_MYMATH)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(Demo ${DIR_SRCS})

# 连接库
target_link_libraries(Demo ${EXTRA_LIBS})